package com.yeyks.consumer.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yeyks.common.dto.RechargeRecordDTO;
import com.yeyks.common.param.RechargeRecordQueryParam;
import com.yeyks.consumer.dal.domain.RechargeRecord;
import com.yeyks.consumer.dal.domain.UserInfo;
import com.yeyks.consumer.dto.RecommendDetailDTO;
import com.yeyks.consumer.param.BagGiftPayParam;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;


/**
 * <p>
 * 充值记录表 服务类
 * </p>
 *
 * @author yun
 * @since 2019-06-25
 */
public interface RechargeRecordService extends IService<RechargeRecord> {

    /**
     * 大礼包回调
     *
     * @param orderNo
     * @param flag
     */
    @Transactional
    void paySmallBlackFishSpreeCallback(String orderNo, Boolean flag);

    //发放创客佣金
    void makerCommission(RechargeRecord rechargeRecord);

    /**
     * 处理会员卡充值回调
     *
     * @param orderNo 订单号
     * @param flag    是否成功
     */
    void payCardCallback(String orderNo, Boolean flag);

    /**
     * 通过邀请码获取该邀请码对应推广人数
     *
     * @param inviteCode
     * @return
     */
    Integer selectCountByInviteId(String inviteCode);

    /**
     * 获取佣金明细
     *
     * @param id
     * @param type
     * @param pageNo
     * @param pageSize
     * @return
     */
    List<RecommendDetailDTO> detailList(Integer id, String type, Integer pageNo, Integer pageSize);

    /**
     * 推广规则
     *
     * @return
     */
    List<String> rule();

    /**
     * 获取活动链接
     *
     * @return
     */
    Object getUrl();

    /**
     * 判断用户是否已经充值
     *
     * @param userInfo
     * @return
     */
    Boolean isRecharge(UserInfo userInfo);

    /**
     * 创建充值记录
     *
     * @param rechargeRecord
     * @return
     */
    Boolean insert(RechargeRecord rechargeRecord);

    /**
     * 通过充值订单id获取充值订单信息
     *
     * @param id
     * @return
     */
    RechargeRecord selectById(Integer id);

    /**
     * 更新充值订单信息
     *
     * @param rechargeRecord
     * @return
     */
    Integer update(RechargeRecord rechargeRecord);

    /**
     * 推广描述图片
     *
     * @return
     */
    Map<String, Object> desc();

    /**
     * 推广活动详情
     *
     * @return
     */
    Map<String, List<String>> activityDetail();

    /**
     * 推广大礼包充值
     *
     * @param userInfo
     * @param bagGiftPayParam
     * @param ip
     * @return
     */
    Object bagGiftPay(UserInfo userInfo, BagGiftPayParam bagGiftPayParam, String ip);

    /**
     * 用户生成推广大礼包订单
     *
     * @param price
     * @param userInfo
     * @return
     */
    Map<String, Object> createBagGiftOrder(Integer price, UserInfo userInfo, String inviteId);

    /**
     * 分页查询充值记录
     *
     * @param param 查询条件
     * @return
     */
    List<RechargeRecordDTO> queryByParam(RechargeRecordQueryParam param);

    /**
     * 查询条数
     *
     * @param param
     * @return
     */
    int queryCount(RechargeRecordQueryParam param);

    /**
     * 导出充值记录的查询
     * @param param 查询条件
     * @return 返回结果
     */
    List<RechargeRecordDTO> queryExportByParam(RechargeRecordQueryParam param);

    //创建创客订单（创客身份记录）
    RechargeRecord getNewRechargeRecord(Integer payAmount, UserInfo userInfo, String inviteId);

    //根据手机号非充值绑定创客
    void bindRecharge(String phone, String inviteId);

    /**
     * 设置 发票记录为null
     * @param id
     */
    void updateInvoiceIsNull(Long id);
}
